package com.demo.core.service.base;

import java.util.List;

import com.demo.core.dao.base.support.ResultSearchResult;
import com.demo.core.model.Config;

/**
 * 配置数据服务接口
 * 
 * @author ryuu.kk
 */
public interface ConfigService {
	
	/**
	 * 存储Config模型
	 * 如果配置ConfigItem存在时,
	 * 将ConfigItem持久化。
	 * @param config config模型对象
	 * @return 主键ID
	 */
	Long save(Config config);
	
	/**
	 * 判断Config模型是否存在
	 * @param id 主键ID
	 * @return 是否存在
	 */
	boolean exists(Long id);
	
	/**
	 * 更新可用标志
	 * @param id 主键ID
	 * @param enabled 是否可用
	 * @param status 配置状态
	 */
	void updateStatus(Long id, boolean enabled, String status);
	
	/**
	 * 更新配置信息
	 * @param id 配置ID
	 * @param title 配置标题
	 * @param value 配置Value
	 */
	void update(Long id, String title, String value);
	
	/**
	 * 更新配置信息(带有配置项更新)
	 * @param id 配置ID
	 * @param config 配置模型
	 */
	void update(Long id, Config config);
	
	/**
	 * 删除配置信息
	 * @param id 配置ID
	 */
	void delete(Long siteId, Long id);
	
	/**
	 * 取得配置属性
	 * @param configId 配置ID
	 * @return 配置模型对象
	 */
	Config find(Long configId);
	
	/**
	 * 取得配置属性
	 * @param siteId 站点ID
	 * @param name 配置NAME
	 * @return 配置模型对象
	 */
	Config find(Long siteId, String name);
	
	/**
	 * 通过站点ID查询站点的所有配置
	 * @param siteId 站点ID
	 * @return 站点配置对象模型
	 */
	List<Config> findAll(Long siteId);
	
	/**
	 * 通过站点ID查询站点的所有配置
	 * @return 站点配置对象模型
	 */
	List<Config> findAll(String name);
	
	/**
	 * 通过站点ID查询站点的所有配置
	 * @param siteId 站点ID
	 * @param i18n 数据语言
	 * @return 站点配置对象模型
	 */
	List<Config> findAll(Long siteId, String i18n);
	
	/**
	 * 联查查询配置和该配置子项列表
	 * @param 配置ID
	 * @return 配置模型
	 */
	Config query(Long id);
	
	/**
	 * 联查查询配置和该配置子项列表
	 * @param name 配置名
	 * @return 配置模型
	 */
	Config query(Long siteId, String name);
	
	/**
	 * 联合查询站点配置列表及对应子项信息
	 * @param siteId 站点ID
	 * @return 配置模型列表
	 */
	List<Config> queryAll(Long siteId);
	
	/**
	 * 联合查询站点配置列表及对应子项信息
	 * @param siteId 站点ID
	 * @param i18n 国际化CODE
	 * @return 配置模型列表
	 */
	@Deprecated
	List<Config> queryAll(Long siteId, String i18n);
	
	/**
	 * 使用站点ID和配置类型,查询站点的指定类型的配置列表
	 * @param siteId 站点ID
	 * @param type 配置模型类型:内置/站点/自定义
	 * @return List<Config>
	 */
	List<Config> queryList(Long siteId, String type);
	
	/**
	 * 使用站点ID、配置类型和可用标志查询配置模型列表
	 * @param siteId 站点ID
	 * @param type 配置类型,如果为空则不计入检索条件
	 * @param enabled 可用标志,如果为空则不计入检索条件
	 * @return List<Config>
	 */
	List<Config> queryList(Long siteId, String type, Boolean enabled);
	
	/**
	 * 分页查询站点配置列表
	 * @param siteId 站点ID
	 * @param type 配置模型的类型：内置/站点/自定义;设置为空则检索所有类型
	 * @param firstResult 起始节点
	 * @param maxResults 最大条目
	 * @return ResultSearchResult<Config>
	 */
	ResultSearchResult<Config> search(Long siteId, String type,
			int firstResult, int maxResults);
}
